문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 디자인 패턴 (문단 편집) ==== 발행-구독(Publisher-Subscriber) ==== 발행-구독 패턴은 옵저버 패턴의 변형으로, 줄여서 펍-섭(Pub-Sub) 패턴이라고도 부른다. 작동 원리 자체는 옵저버 패턴과 거의 같다. 여기서 옵저버 패턴의 서브젝트(Subject)가 본 패턴의 발행자(Publisher), 옵저버(Observer)가 본 패턴의 구독자(Subscriber)의 역할을 맡는다. 발행자 - 구독자 간의 관계에 따라 발행자가 어떠한 사실을 알리면 모든 구독자에게 알림이 간다는 것까지도 똑같다. 다만 발행-구독 패턴은 옵저버 패턴과 한 가지 차이점이 있는데, 옵저버 패턴에서는 서브젝트가 옵저버와의 관계를 관리하는 것까지 맡았다면, 발행-구독 패턴은 발행자와 구독자 사이에 브로커(Broker)가 끼어들어 이러한 관계를 관리한다. 브로커가 발행자 - 구독자 간의 연결을 관리하고 전파하는 역할을 맡으면, 발행자는 그냥 알려야 할 상황이 오면 브로커에게 전송만 하면 되고, 구독자는 브로커가 처리하여 보낸 정보를 받기만 하면 된다. 발행-구독 패턴의 장점은 옵저버 패턴과 달리 발행자 - 구독자 간의 결합성이 매우 낮아지며, 브로커를 어떻게 코딩하느냐에 따라 다양한 상황에서 적용될 수 있다는 점이다. 특히 발행자가 발행해야 하는 정보가 하나가 아닌데 배분 방식이 따로 있을 경우 옵저버 패턴보다 발행-구독 패턴이 더 간단하다. 예를 들어 앞서 플레이어의 HP를 여러 UI와 연동시키기 위해 옵저버 패턴을 사용했는데, 사실 플레이어가 UI를 향해 보내야 하는 정보는 HP뿐이 아니다. 그 외에도 MP나 EXP 등 다양한 정보를 여러 개의 UI로 연동시켜야 한다. 그런데 예를 들어 'HP는 메인 UI, 캐릭터 UI 등으로 전부 전송시켜야 하는데, EXP는 메인 UI에만 보내면 된다' 같은 상황이 있을 수 있다. 그러한 정보들을 각각 서브젝트를 일일이 할당하여 처리하게 만드는 것은 효율이 떨어진다. 그 경우, 브로커가 'HP, MP, EXP'라는 인풋을 한꺼번에 받아 자기 재량에 맞춰 필요로 하는 UI로 따로 배분해줄 수 있는 시스템을 갖춘다면 플레이어(발행자)는 그냥 자기 정보를 보내주면 되고 UI(구독자)는 브로커가 구독한 발행자의 정보만 전달해주면 거기에 맞춰 UI를 바꿀 수 있다. 또 다른 예시를 들어보자. 어떠한 신문사에서는 '시사 정보', '주식 정보', '정치 정보', '해외 정보' 등의 다양한 분야를 섭렵하여 이를 알려준다. 그러나 신문사에 구독을 한 사람 중에서는 시사 정보만 받고 싶어하는 사람도 있고, 주식 정보만 받고 싶어하는 사람도 있을 것이다. 혹은 그 중 몇 개만 알려주거나 모든 정보를 다 구독하고 싶을 수도 있다. 이럴 경우 신문사에서 내는 각각의 정보 부서가 일일이 자신의 정보를 발간받고 싶어하는 구독자를 관리하는 것보다, 부서는 발행하는 일만 담당하여 원고를 행정실에 넘겨주고 행정실에서 정보와 구독자 간의 연결을 담당하여 배분해주는 것이 더욱 효율적일 것이다. 그러나 발행-구독 패턴이 옵저버 패턴의 상위호환이라는 것은 아니다. 가장 큰 단점은 옵저버 패턴은 서브젝트에서 옵저버를 향해 직접적으로 정보를 넘겨주는 동기 패턴인 반면, 발행-구독은 발행자의 발행과 구독자의 구독이 같은 타임라인 내에 존재하지 않는 비동기 패턴이라는 것이다. 위의 인터페이스나 신문 구독 같은 경우에는 상관없지만, 보내는 순서가 중요한 일대다 의존성의 경우 발행-구독이 아니라 옵저버 패턴을 써야 한다. 발행자 - 구독자 간의 모든 연결을 브로커에게 맡기기 때문에 패턴의 규모가 커질수록 전달에 과부하가 걸리거나 시간이 지체되기도 한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기